//
//  SqliteDtaHandle.m
//  WorkUI-17
//
//  Created by lanou3g on 15/7/3.
//  Copyright (c) 2015年 lanou3g. All rights reserved.
//

#import "SqliteDtaHandle.h"


@implementation SqliteDtaHandle

//创建一个单例对象
static SqliteDtaHandle *sQH = nil;
+(SqliteDtaHandle *)shareSqliteDataHandle{
    //加上线程锁保证访问安全
    @synchronized(self){
        if (nil == sQH) {
            sQH = [[SqliteDtaHandle alloc]init];
        }
        return sQH;
    }
}

//声明一个数据库指针,用他来操作我们的数据库
static sqlite3 *sq = nil;
//声明一个打开数据库的方法
-(void)openSqlite{
    //1.找到软件在什么地方
    NSString *doucumentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *sqlitePath = [doucumentPath stringByAppendingPathComponent:@"diary.sqlite"];
    //2.创建数据表
    //首先打开数据库
    int openResult = sqlite3_open([sqlitePath UTF8String], &sq);
    //如果打开数据库失败直接跳出
    if (openResult != SQLITE_OK) {
        NSLog(@"打开数据库失败");
        return;
    }
    
    //然后建表
    NSString *creatSQL = @"create table diary(diary_date text primary key not NULL,diary_contants BLOB not NULL)";
    //然后运行sql语句
    char *error = nil;
    int result = sqlite3_exec(sq, [creatSQL UTF8String], NULL, NULL, &error);
    
    //3.判断表是否创建成功
    if (result == SQLITE_OK) {
        NSLog(@"数据表创建成功");
    }
    else{
        NSLog(@"ERROR请重新创建%s",error);
        
    }
    
}



#pragma mark - 关闭数据库

//声明一个关闭数据库的方法
-(void)closedSqlite{
    int result = sqlite3_close(sq);
    if (result == SQLITE_OK) {
        sq = nil;
    }
}
#pragma mark - 插入用户信息
//声明一个插入日记的函数
-(void)downLoadInShuJuKu:(NSDate  *)date contants:(NSString *)contants{
    //1.插入数据的sql语句 insert into 表名(字段1,字段2...) values('值1','值2'...)
    NSString *insertSQL = [NSString stringWithFormat:@"insert into diary(diary_date,diary_contants) values('%@','%@')",date,contants];
    //2.执行
    char *error = nil;
    int result = sqlite3_exec(sq, [insertSQL UTF8String], nil, nil, &error);
    //3.判断
    if (result == SQLITE_OK) {
        NSLog(@"插入成功");
    }
    else{
     
        
        NSLog(@"插入失败:%s",error);
        
    }
    
}
#pragma mark - 查询所有收藏活动
//声明查询一条信息的方法
-(NSString *)selectListDiary:(NSDate *)date{
    //1.查询的sql语句;当我们按照条件区查询表中的数据时,sql语句的格式是select *from 表名 where 字段1='值1' and 字段2='值2'
    NSString *selectSQL =[NSString stringWithFormat:@"select *from diary where diary_date = '%@'",date];
    //2.创建一个跟随指针
    sqlite3_stmt *stm = nil;
    //3.执行sql语句
    int result = sqlite3_prepare_v2(sq, [selectSQL UTF8String], -1, &stm, nil);
    //4.如果执行成功就会去取值
    if (result == SQLITE_OK) {
        //通过循环去一个一个的取值
        while (sqlite3_step(stm)==SQLITE_ROW) {
            //取值;当我们没有自增id,数据表会给我们生成一个rowid字段,但是这个rowid没有计算在表的字段内
            char *contacts = (char *)sqlite3_column_text(stm, 1);
            
            NSString *datastr = [NSString stringWithUTF8String:contacts];
            NSLog(@"%@",datastr);
            return datastr;
            
        }
        
    }
    else{
        NSLog(@"执行错误");
    }
    //释放跟随指针
    sqlite3_finalize(stm);
    return nil;
}
//声明查询所有收藏活动的信息的方法
-(NSMutableArray *)selectAllDiary{
    //1.查询的sql语句;当我们按照条件区查询表中的数据时,sql语句的格式是select *from 表名 where 字段1='值1' and 字段2='值2'
    NSString *selectSQL =[NSString stringWithFormat:@"select *from diary"];
    //2.创建一个跟随指针
    sqlite3_stmt *stm = nil;
    //3.执行sql语句
    int result = sqlite3_prepare_v2(sq, [selectSQL UTF8String], -1, &stm, nil);
    
    NSMutableArray *diaryArray = [NSMutableArray array];
    //4.如果执行成功就会去取值
    if (result == SQLITE_OK) {
        //通过循环去一个一个的取值
        while (sqlite3_step(stm)==SQLITE_ROW) {
            //取值;当我们没有自增id,数据表会给我们生成一个rowid字段,但是这个rowid没有计算在表的字段内
            char *contacts = (char *)sqlite3_column_text(stm, 1);
            
            NSString *diaryContacts = [NSString stringWithUTF8String:contacts];
            [diaryArray addObject:diaryContacts];
        }
        
    }
    else{
        NSLog(@"执行错误");
    }
    //释放跟随指针
    sqlite3_finalize(stm);
    return diaryArray;
}


//声明一个删除活动或电影的方法
-(void)deletWithContact:(NSString *)contact{
    //1.删除的sql语句;格式是:delet from 表名 where 字段='值'
    NSString *deletSQL = [NSString stringWithFormat:@"delete from diary where diary_contants = '%@'",contact];
    //2.执行sql语句
    char *error = nil;
    int result = sqlite3_exec(sq, [deletSQL UTF8String], nil, nil, &error);
    //3.判断执行结果
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    }
    else{
        NSLog(@"删除失败:%s",error);
    }
    
}







@end
